pre-commitの外部リポジトリhookを使って設定を簡略化しつつ色々な事前チェックを済ませてみる
はじめに
先日、pre-commitにてcircleciの手設定validateを行ってみましたが、pre-commitのhookサポート済みリポジトリにcircleci-config-validateを含んだリポジトリが存在していることを知りました。
外部リポジトリからの読み込みにて細かい設定を省いてしまうことでメンテナンスコストを減らせるのですが、上記エントリー記述時にはそこまで踏み込んでいない状態でした。既存の手作業で行っていた設定についても外部リポジトリの読み込みにて対処可能なものがあり、今回それらを纏めて設定しなおしてみました。
hookサポートのリポジトリ
数と種類は相当に存在し、大体探すことで見つかるのではないかなというところです。
今回はこの中から、circleci-config-validate
、flake8
、cfn-python-lint
の設定を取り込んでみました。
外部hookの指定
基本はidのみを指定します。他にもfiles
やlanguage
などありますが、リポジトリ側で各ライブラリの推奨初期値が設定されており、必要に応じてkeyを指定して上書きする形になっています。
circleci-config-validate
ファイルパス等が独自になっていなければ、idを追記するだけで完了します。リポジトリのリリースバージョンだけ確認しておきましょう。今回は0.0.16
を使っています。
- repo: https://github.com/syntaqx/git-hooks rev: v0.0.16 hooks: - id: circleci-config-validate
syntaqx/git-hooks: A collection of git hooks for use with pre-commit
flake8
設定に初期から入っているhttps://github.com/pre-commit/pre-commit-hooks
に追記します。特記すべき事柄はありませんが、チェックしたいパスを限定したい場合はfilesにて指定します。
- repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.4.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-added-large-files - id: flake8 files: '(src|tests)/*'
cfn-python-lint
CFnのファイルパス指定が必要です。YAMLにてテンプレートを記述している場合は、CFnの独自タグによるエラーを抑えるためcheck-yamlのオプションに--unsafe
を指定しましょう。
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.4.0 - id: check-yaml args: ['--unsafe'] - repo: https://github.com/aws-cloudformation/cfn-python-lint rev: v0.26.3 hooks: - id: cfn-python-lint files: 'path/to/cfn/dir/.*\.(json|yml|yaml)$'
aws-cloudformation/cfn-python-lint: CloudFormation Linter
あとがき
外部リポジトリを利用したhookは、大体のケースにおいて必要最低限の設定が担保されるというメリットがあり、総じて設定の手間が省けます。ただ、設定されていない項目を確認するためにも、一度はリポジトリ内での設定値に目を通しておきましょう。